#include "marcador.h"
#include <iostream>
#include "graficos.h"

using namespace std;
using namespace graficos;

Marcador::Marcador(){
	
	this->tipo_letra=0;
	this->texto=0;
}

Marcador::Marcador(int posx,int posy ,int ancho,int alto,int marco,const Color& fondo,const Color& borde){
	this->posx=posx;
	this->posy=posy;
	this->ancho=ancho;
	this->alto=alto;
	this->marco=marco;
	this->fondo.SetColor(fondo.GetR(),fondo.GetG(),fondo.GetB());
	this->borde.SetColor(borde.GetR(),borde.GetG(),borde.GetB());
}

void Marcador::SetLetra(char* texto,char* tipo_letra,int tam,int estilo,int alineacion,const Color& color_letra ){
	this->texto=texto;
	this->tipo_letra=tipo_letra;
	this->tam_letra=tam;
	this->estilo_letra=estilo;
	this->alineacion=alineacion;
	this->color_letra.SetColor(color_letra.GetR(),color_letra.GetG(),color_letra.GetB());

}

void Marcador::Pinta()const{
	//Pinta el borde
	for(int i=1;i<this->marco+1;i++){ 
		Rectangulo(this->posy+i,this->posx+i,this->posy+this->ancho-i,this->posx+this->alto-i,this->borde.GetR(),this->borde.GetG(),this->borde.GetB());
	}
	//Pinta el fondo
	RectanguloR(this->posy+this->marco,this->posx+this->marco,this->posy+this->ancho-this->marco,this->posx+this->alto-this->marco,this->fondo.GetR(),this->fondo.GetG(),this->fondo.GetB());
	int alto_texto,ancho_texto;
	
	GRF_Fuente fuente;
	TEstiloFuente est;
	//miro si es normal, negrita, italica o negrita y italica
	if(this->estilo_letra==1)	est=TTF_STYLE_BOLD;	
	else if(this->estilo_letra==2) est=TTF_STYLE_ITALIC;
	else if(this->estilo_letra==3) est=TTF_STYLE_BOLD|TTF_STYLE_ITALIC;
	else est=TTF_STYLE_NORMAL;
	
	
	fuente=CargarFuente(this->tipo_letra,this->tam_letra,est);
	TamanoTexto(fuente,this->texto,ancho_texto,alto_texto);
	//Si esta centrado
	if(this->alineacion==1){
		EscribirTexto(this->posy+this->ancho/2-(ancho_texto/2),this->posx-(alto_texto/2)+this->marco +(alto/2),this->texto,fuente,this->color_letra.GetR(),this->color_letra.GetG(),this->color_letra.GetB());
	}
	
	else{//si no esta centrado lo pone alineado a la izda
		EscribirTexto(this->posy+this->marco+1,this->posx-(alto_texto/2)+this->marco +(alto/2),this->texto,fuente,this->color_letra.GetR(),this->color_letra.GetG(),this->color_letra.GetB());
	}
	LiberarFuente(fuente);

}
Marcador& Marcador::operator=(const Marcador& m){
	this->posx=m.posx;
	this->posy=m.posy;
	this->ancho=m.ancho;
	this->alto=m.alto;
	this->marco=m.marco;
	this->color_letra.SetColor(m.color_letra.GetR(),m.color_letra.GetG(),m.color_letra.GetB());
	this->fondo.SetColor(m.fondo.GetR(),m.fondo.GetG(),m.fondo.GetB());
	this->borde.SetColor(m.borde.GetR(),m.borde.GetG(),m.borde.GetB());
	
	this->texto=m.texto;
	this->tipo_letra=m.tipo_letra;
	this->tam_letra=m.tam_letra;
	
	return *this;
}	
		
Marcador::~Marcador(){
}


